/**
 * 通用状态映射工具类
 * 支持多种业务场景的状态映射
 */

// 预定义的状态映射
export const STATUS_MAPS = {
  // 事件状态
  eventStatus: {
    notstart: '即将报名',
    // notstart: '未开始',
    signup: '报名中',
    signend: '报名已结束',
    progress: '进行中',
    end: '已结束'
  },
  
  // 事件类型
  eventType: {
    athletics: '田径',
    adult: '成人',
    youth: '青少年',
    children: '儿童',
    disabled: '残疾人',
    elderly: '老年人',
    disabled: '残疾人',
    elderly: '老年人',
    disabled: '残疾人',
    elderly: '老年人',
    disabled: '残疾人',
    elderly: '老年人',
  },
  //俱乐部审核状态status
  clubStatus: {
    apply: '待审核',
    pass: '通过',
    refuse: '拒绝'
  }
}

/**
 * 状态映射工具类
 */
export class StatusMapper {
  constructor(statusMap = {}) {
    this.statusMap = statusMap
  }

  /**
   * 获取状态对应的显示文本
   * @param {string} status - 状态值
   * @param {string} defaultValue - 默认值
   * @returns {string} 显示文本
   */
  getText(status, defaultValue = '') {
    return this.statusMap[status] || defaultValue
  }

  /**
   * 检查状态是否有效
   * @param {string} status - 状态值
   * @returns {boolean} 是否为有效状态
   */
  isValid(status) {
    return status in this.statusMap
  }

  /**
   * 获取所有状态值
   * @returns {string[]} 状态值数组
   */
  getStatuses() {
    return Object.keys(this.statusMap)
  }

  /**
   * 获取所有显示文本
   * @returns {string[]} 显示文本数组
   */
  getTexts() {
    return Object.values(this.statusMap)
  }

  /**
   * 获取状态映射对象
   * @returns {Object} 状态映射对象
   */
  getMap() {
    return { ...this.statusMap }
  }

  /**
   * 添加新的状态映射
   * @param {string} status - 状态值
   * @param {string} text - 显示文本
   */
  addStatus(status, text) {
    this.statusMap[status] = text
  }

  /**
   * 移除状态映射
   * @param {string} status - 状态值
   */
  removeStatus(status) {
    delete this.statusMap[status]
  }
}

/**
 * 创建状态映射器实例
 * @param {string|Object} typeOrMap - 预定义类型或自定义映射对象
 * @returns {StatusMapper} 状态映射器实例
 */
export function createStatusMapper(typeOrMap) {
  if (typeof typeOrMap === 'string') {
    // 使用预定义的类型
    const statusMap = STATUS_MAPS[typeOrMap] || {}
    return new StatusMapper(statusMap)
  } else if (typeof typeOrMap === 'object') {
    // 使用自定义映射对象
    return new StatusMapper(typeOrMap)
  } else {
    // 默认返回空映射器
    return new StatusMapper()
  }
}

/**
 * 便捷函数：获取事件状态文本
 * @param {string} status - 状态值
 * @returns {string} 显示文本
 */
export function getEventStatusText(status) {
  return createStatusMapper('eventStatus').getText(status)
}

/**
 * 便捷函数：获取事件类型文本
 * @param {string} status - 状态值
 * @returns {string} 显示文本
 */
export function getEventTypeText(status) {
  return createStatusMapper('eventType').getText(status)
}

